﻿//题目描述
//数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列，只记得其中N 个整数。
//现在给出这N 个整数，小明想知道包含这N 个整数的最短的等差数列有几项？
//输入格式
//输入的第一行包含一个整数N。
//第二行包含N 个整数A1​, A2​, ⋯, AN​。（注意𝐴1∼𝐴𝑁​并不一定是按等差数列中的顺序给出 )。
//输出格式
//输出一个整数表示答案。
//例如：
//输入             输出
//5                10    
//2 6 4 10 20 
//包含2 6 4 10 20的最短等差数列是2 4  6 8 10 12 14 16 18 20；
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll gcd(ll a, ll b) {
	return b == 0 ? a : gcd(b, a % b);
}
int main() {
	ll n;
	cin >> n;
	if (n > 1e5||n<1)
		return false;
	vector<ll>a(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		if (a[i] > 1e9||a[i]<0)
			return false;
	}
	sort(a.begin(), a.end());
	ll mind = a[1]-a[0];
		/*
		* for(int i=0;i<n;i++){
		if (a[i] - a[i - 1] < mind) {
			mind = a[i] - a[i - 1];
		}
		}这里不能用上面的 算法来求，例如当输入是1 3 6时，其公差为1上面算法算出的公差为2；
		*/
for (int i = 2; i < n; i++) {
		mind = gcd(mind,a[i]-a[i - 1]);
	}
	if (mind == 0) {
		cout << n << "\n";
		return 0;
	}
	ll an = a[n - 1];
	ll a1 = a[0];
	ll num = (an - a1) / mind ;
	cout << num +1<< "\n";
	return 0;
}
